/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Tables;

/**
 *
 * @author rehgon
 */
import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Fertigungsschritt {

    public static String  produziere(Connection conn, int teilNr, String minProduceDate) {
        
        //Initialisierungen
        String nextDate = "", idMaschine = "";
        int idMitarbeiter = 0;
        boolean freeWorker = false, freeMachine = false;
        ResultSet rsFreeWorker = null, rsFreeMachine = null;        
        Calendar calendar = Calendar.getInstance();        
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        //SetzeDatum auf minProduceDate
        try {
            calendar.setTime(dateFormat.parse(minProduceDate));
        } catch (ParseException ex){
            System.out.println(ex.getMessage());
        }
        
        //Solange es keinen freien Arbeiter oder Maschine gibt: erhöhe Datum um 1        
        while ((freeMachine == false && freeWorker == false) || idMitarbeiter == 0) {
            
            nextDate = dateFormat.format(calendar.getTime());

            try {
                //Überprüft ob an diesem Tag eine Maschine frei ist
                rsFreeMachine = Maschinen.checkIfMachineFree(conn, teilNr, nextDate);
                                
                while(rsFreeMachine.next()) {
                    freeMachine = true;
                    idMaschine = rsFreeMachine.getString("bezeichnung");
                }
                
                if(freeMachine) {
                    //Überprüft ob an diesem Tag ein Mitarbeiter frei ist, der die Maschine bedienen kann
                    rsFreeWorker = Mitarbeiter.getFreeWorker(conn, idMaschine, nextDate);
                    
                    while(rsFreeWorker.next()) {
                        freeWorker = true;
                        idMitarbeiter = rsFreeWorker.getInt("mitarbeiterId");
                    }                    
                } else {
                    freeMachine = false;
                }                
            } catch(SQLException ex) {
                System.out.println(ex.getMessage());
            }
            
            //Erhöhe Datum um einen Tag
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        
        //Ausgabe
        System.out.println("Datum: " + nextDate);
        System.out.println("Teil Nr.:" + teilNr);
        System.out.println("Maschinenbezeichnung: " + idMaschine);
        System.out.println("Mitarbeiter Id:" + idMitarbeiter);

        //Schreibe Daten in die Tabelle
        insertFertigungsschritt(conn, teilNr, idMaschine, idMitarbeiter, nextDate);
        
        return nextDate;
    }
    
    public static void insertFertigungsschritt(Connection conn, int teilNr, String idMaschine, int idMitarbeiter, String datum) {
        
        try {
            
            //Bereite Statement vor
            PreparedStatement pStmt = conn.prepareStatement(
                  " insert into Fertigungsschritt(idTeil, idMaschine, idMitarbeiter, datum)"
                + " values(" + teilNr + ",'" + idMaschine + "'," + idMitarbeiter + "," + "?" + ")"
            );
            
            //Datumsvorlage
            Date tmpdate = new Date(0000-00-00);
            
            //Ersetze '?' durch den String 'datum'
            pStmt.setDate(1,tmpdate.valueOf(datum));
            
            //Query ausführen
            pStmt.executeUpdate();
            
        } catch(SQLException ex) {
            System.out.println(ex.getMessage());
        }
    }
}
